package com.huirui.server.pojo.result;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 分页查询结果封装类，统一返回分页数据格式
 *
 * @param <T> 数据列表的泛型类型，支持任意实体类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "分页查询结果封装类")
@Builder
public class PageResult<T> implements Serializable {

    /**
     * 当前页数据列表
     */
    @Schema(description = "当前页的数据列表", example = "[{\"id\":1,\"name\":\"测试数据1\"},{\"id\":2,\"name\":\"测试数据2\"}]")
    private List<T> records;

    /**
     * 总记录数
     */
    @Schema(description = "符合条件的总记录数", example = "100")
    private Long total;

    /**
     * 每页显示条数
     */
    @Schema(description = "每页显示的记录数量", example = "10")
    private Long size;

    /**
     * 当前页码
     */
    @Schema(description = "当前页码（从1开始）", example = "1")
    private Long current;

    /**
     * 总页数
     */
    @Schema(description = "总页数，由总记录数和每页条数计算得出", example = "10")
    private Long pages;

    /**
     * 从MyBatis-Plus的IPage对象转换为当前分页结果对象
     *
     * @param iPage MyBatis-Plus的分页查询结果对象
     * @param <T>   数据类型
     * @return 封装后的分页结果对象
     */
    public static <T> PageResult<T> from(IPage<T> iPage) {
        return new PageResult<>(
                iPage.getRecords(),
                iPage.getTotal(),
                iPage.getSize(),
                iPage.getCurrent(),
                iPage.getPages()
        );
    }
}
    